package com.mashibing.singleton;

/**
 * 单列模式-饿汉式
 * jvm保证了内存中只会有一份实例
 * 存在的问题：不管使用与否，都会先实例化
 * 工作中常用的写法
 */
public class Mgr01 {
    //jvm只会加载当前类到内存一次，类在加载一次的时候，static 属性INSTANCE只会被实例化一次，就保证了该类在内存中只有一个实例
    private static final Mgr01 INSTANCE = new Mgr01();
    //私有化构造器，保证了该类在外面的类中无法new出来，想要获取该类的实例，就只能通过调用getInstance()方法来获取
    private Mgr01(){ }
    //提供public类型的获取实例的静态方法
    public static Mgr01 getInstance(){
        return INSTANCE;
    }

    public static void main(String[] args) {
        Mgr01 instance = Mgr01.getInstance();
        Mgr01 instance1 = Mgr01.getInstance();
        System.out.println(instance == instance1);
        //同一个类的多个实例，hashCode值一样，则这多个实例相等即为同一个对象
        System.out.println(instance.hashCode());
        System.out.println(instance1.hashCode());
    }
}
